package com.heima.leetcode.practice;

import java.util.HashSet;
import java.util.Set;

/**
 * @author 勾新杰
 * @version 1.0
 * @description: leetcode 231. 2的幂
 * @date 2025/3/11 11:57
 */
public class E231 {

    /**
     * <h3>方法一：位运算</h3>
     * @param n 输入的数
     * @return 返回是否是2的幂
     */
    public boolean isPowerOfTwo1(int n) {
        if(n == 0 || n == Integer.MIN_VALUE) return false;
        return (n & (n - 1)) == 0;
    }

    private static final Set<Integer> powersOfTwo = new HashSet<>();

    static {
        for (int i = 0; i < 31; i++) {
            powersOfTwo.add(1 << i); // 使用左移操作生成2的幂次方
        }
    }

    /**
     * <h3>方法二：将所有int可能的存到hash表中</h3>
     * @param x 输入的数
     * @return 返回是否是2的幂
     */
    public static boolean isPowerOfTwo(int x) {
        return powersOfTwo.contains(x);
    }
}
